Tensor


Tensor

A tensor is a collection of data that is organized in dimensions. For instance, an array of numbers can be seen as a 1D Tensor, while a matrix can be seen as a 2D Tensor. As data of several dimension can flow through the layers of a convolutional network, tensors are very useful in this type of artificial neural networks.
Un tensor es una colección de datos que está organizada en dimensiones. Por ejemplo, un arreglo de números puede ser visto como un Tensor 1D, mientras que una matriz puede ser vista como un Tensor 2D. Como los datos de varias dimensiones pueden fluir a través de las capas de una red convolucional, los tensores son muy útiles en este tipo de red neuronal artificial.

3D Tensor

A 3D Tensor is a data block with numeric values as shown in the figure. The numeric values inside the tensor are organized in three dimensions: Width, Height and Depth. A color image can be seen as a 3D Tensor. In the figure below, the 3D tensor has 3072 numeric values.
Un Tensor 3D es un bloque de datos con valores numéricos como se muestra en la figura. Los valores numéricos dentro del tensor están organizados en tres dimensiones: Ancho, Alto y Profundidad. Una imagen de color se puede ver como un bloque de datos. En la figura de abajo, el bloque de datos tiene 2072 valores numéricos.

Tensor3D

Problem 1
A JPG color image has a resolution of 1024 by 720 pixels. The image is going to be stored in a 3D Tensor) with double values (floating point numeric values). Each double value requires eight bytes. Compute the size in bytes of the Tensor produced from the JPG image.
Una imagen de color JPG tiene una resolución de 1024 por 720 pixeles. La imagen se almacenará en un Tensor 3D con valores double (valores numéricos de punto flotante). Cada valor de punto flotante requiere ocho bytes. Calcule el tamaño en bytes del Tensor producidos desde la imagen JPG.

Problem 2
A set of PNG color images has 500 images. All images have a resolution of 256 by 256 pixels. The image array is going to be stored in a 4D Tensor with double values (floating point numeric values). Each double value requires eight bytes. Compute the size in bytes of the 4D Tensor.
Un conjunto de imágenes de color PNG tiene 500 imágenes. Todas las imágenes tienen una resolución de 256 por 256 pixeles. El arreglo de imágenes se almacenará en un Tensor 4D con valores double (valores numéricos de punto flotante). Cada valor de punto flotante requiere ocho bytes. Calcule el tamaño en bytes del Tensor 4D.

Layer

The figure below shows a layer used in a Convolutional Neural Network. The layer received at its input the 3D Tensor X. The input Tensor has a width of 32, a height of 32 and a depth of 3. The output produced by the layer Y has a width of 8, a height of 8 and a depth of 3. As it can be seen, the dimensions of the input Tensor and the dimensions of the output Tensor may be different.
La figura de abajo muestra una capa usada en una Red Neuronal Convolucional. La capa recibe en su entrada el Tensor 3D X. El Tensor de entrada tiene un ancho de 32, una altura de 32 y una profundidad de 3. La salida producida por la capa Y tiene un ancho de 8, una altura de 8 y una profundidad de 3. Como se puede ver, las dimensiones del Tensor de entrada y las dimensiones del Tensor de salida pueden ser diferentes.

Layer

Tensor Indexes

Each element in a Tensor has a set of indexes. Each index is a numeric integer value to specify the position of the value in the Tensor. In the figure below, the Tensor X requires three index values. For the color image in the figure, the first index has a value of zero for all values in the red channel. The first index has a value of one for all values in the green channel. Finally, the first index has a value of two for all values in the blue channel. The second index is used to specify the row of the value. The third index is used to specify the column of the value. The output Y tensor produced by the layer also needs three index values to specify the position of the values inside Y. In this case, the width and the height were reduced from 32 to 8. Observe that the depth of the input tensor is three, while the depth of the output tensor is also three.
Cada elemento en un Tensor tiene un conjunto de índices. Cada índice es un valor numérico entero para indicar la posición del valor en el Tensor. En la figura de abajo, el Tensor X requiere tres índices. Para la imagen de color en la figura, el primer índice tiene un valor de cero para todos los valores en el canal rojo. El primer índice tiene un valor de uno para todos los valores en el canal verde. Finalmente, el primer índice tiene un valor de dos para todos los valores en el canal azul. El segundo índice es usado para indicar el renglón del valor. El tercer índice es usado para indicar la columna del valor. El tensor de salida Y producido por la capa también necesita tres índices para indicar la posición de los valores dentro de Y. En este caso, el ancho y la altura fueron reducidos de 32 a 8. Observe que la profundidad del tensor de entrada es tres, mientras que la profundidad del tensor de salida es también tres.

LayerDetail

Tensor Dimensions

The figure below shows the dimensions of the X tensor. The numbers inside the green arrow display the dimensions of the X tensor. The first number is the width, the second number is the height and the last number is the depth. However, the order of the indexes is different. The first number is the depth index, the second number is the height index and the last number is the width index.
La figura de abajo muestra las dimensiones del tensor XX. El primer número es el ancho, el segundo número es la altura y el último número es la profundidad. Sin embargo, el orden de los índices es diferente. El primer número es el índice de la profundidad, el segundo número es la el índice la altura y el último número es el índice para el ancho.

IndexOrder

Problem 3
Find the index values for each of the values displayed in yellow in the X tensor.
Encuentre los valores de los índices para cada unos de los valores mostrados en amarillo en el tensor X.

AppleIndex

Problem 4
Find the index values for each of the values displayed in yellow in the Y tensor.
Encuentre los valores de los índices para cada unos de los valores mostrados en amarillo en el tensor Y.

TensorIndex

Convolutional Neural Network structure

A convolutional neural network is composed of layers as shown in the figure. There are four type of layers commonly used in convolutional neural networks:
  1. The fully connected layer
  2. The pooling layer
  3. The convolutional layer
  4. The locally connected layer
Layers with different sizes and types are combined to create a convolutional neural network.
Una red neuronal convolucional está compuesta de capas como se muestra en la figura. Hay cuatro tipos de capas comúnmente usadas en las redes neuronales convolucionales:
  1. La capa completamente conectada
  2. La capa de poleo
  3. La capa convolucional
  4. La capa localmente conectada
Capas con distintos tamaños y tipos son combinadas para crear una red neuronal convolucional.

structure

Wintempla Tensor

Wintempla provides the Nn::Tensor class to store an N-dimensional tensor. The example below creates a 3-dimensional tensor of size 6×5×4.
Wintempla proporciona la clase Nn::Tensot para almacenar un tensor de N-dimensiones. El ejemplo de abajo crea un tensor de tres de dimensiones de tamaño 6×5×4.

Problem 5
Create a dialog application called Tendeep using Wintempla. After creating the application, insert a multiline textbox called tbxOutput.
Cree una aplicación de diálogo llamada Tendeep usando Wintempla. Después de crear la aplicación, inserta una caja de texto multilínea llamada tbxOutput.

Tendeep.cpp
. . .
void Tendeep::Window_Open(Win::Event& e)
{
     //________________________________________________________ 1. Initialize a tensor
     Sys::Tensor tensor;
     tensor.NumDimensions = 3;
     tensor.SetCount(0, 6);
     tensor.SetCount(1, 5);
     tensor.SetCount(2, 4);
     size_t i0 = 0, i1 = 0, i2 = 0;
     double* p;
     for (i0 = 0; i0 < tensor.GetCount(0); i0++)
     {
          for (i1 = 0; i1 < tensor.GetCount(1); i1++)
          {
               p = tensor(i0, i1);
               for (i2 = 0; i2 < tensor.GetCount(2); i2++)
               {
                    p[i2] = (i0+1)*100.0 + (i1+1)*10.0 + (i2+1)*1.0;
               }
          }
     }
     //________________________________________________________ 2. Display a tensor
     wchar_t tmp[256];
     wstring text;
     const size_t depth = tensor.GetCount(0);
     const size_t height = tensor.GetCount(1);
     const size_t width = tensor.GetCount(2);
     size_t d, r, c;
     const double* row;
     for (d = 0; d < depth; d++)
     {
          text += L"+ + + + + + + + + + + + + + + + + + + + + + + + + + +\r\n";
          for (r = 0; r < height; r++)
          {
               row = tensor(d, r);
               for (c = 0; c < width; c++)
               {
                    _snwprintf_s(tmp, 256, _TRUNCATE, L"%.5f\t\t", row[c]);
                    text += tmp;
               }
               text += L"\r\n";
          }
     }
     tbxOutput.Text += text;
}


TendeepRun

answer

Problem 6
Download 24 image files from the Internet: 6 apples, 6 oranges, 6 pineapples and 6 mangos. Crop the images so that very little empty space surrounds the fruits. Resize the images so that all images have a size of 256 by 256 pixels. Save the image as PNG, GIF, BMP or JPG. Despite the fact that GIF images can have only 256 colors, they do no have compression noise as JPG images do. For illustrative purposes, we will use this small database for the following exercises, however, you may want to add more images to improve your database and avoid overfitting.
Descargue dos archivos de imagen de la Internet: 6 manzanas, 6 naranjas, 6 piñas y 6 mangos. Recorte las imágenes para que muy poco espacio vacío este alrededor de las frutas. Cambie de tamaño de las imágenes para que ambas imágenes tengan un tamaño de 256 por 256 pixeles. Guarde las imágenes como PNG, GIF, BMP o JPG. A pesar del hecho de que las imágenes GIF pueden tener solamente 256 colores, estas no tienen ruido de compresión como el que tienen las imágenes de JPG. Para propósitos ilustrativos, usaremos esta pequeña base de datos en los siguientes ejercicios, sin embargo, usted puede agregar más imágenes para mejorar su base de datos y evitar el sobre ajuste.

Fruit

Problem 7
Create a Neural Lab project Grocery with a Main file. After creating the project, create a new folder called fruit inside the Grocery folder and copy the images of the previous problem inside the fruit folder.Cree un proyecto de Neural Lab llamado Grocery con un archivo Main. Después de crear el proyecto, cree una nueva carpeta llamada fruit dentro de la carpeta Grocery y copie las imágenes del problema previo dentro de la carpeta fruit.

GroceryFolder

Step A
After creating the project, edit the Main.lab file as show. Then, run the program. Finally, double click the fruit tensor to inspect the three slides of each image.
Después de crear el proyecto, edite el archivo Main.lab como se muestra. Entonces, ejecute el programa. Finalmente, haga clic en el tensor llamado fruit para inspeccionar las tres rebanadas de cada imagen.

Grocery\Main.lab
Tensor fruit;
fruit.LoadFolder();

FruitTensor

© Copyright 2000-2021 Wintempla selo. All Rights Reserved. Jul 22 2021. Home